import axios from "axios";
import store from "@/store";
import router from "@/router";

// 线上环境: https://apipc-xiaotuxian-front.itheima.net/
// 开发环境: http://pcapi-xiaotuxian-front-devtest.itheima.net/

// export const baseURL = "https://apipc-xiaotuxian-front.itheima.net/";
export const baseURL = "http://pcapi-xiaotuxian-front-devtest.itheima.net/";

// 创建请求实例对象 (不包含token)
const instanceWithoutToken = axios.create({ baseURL });
// 创建请求实例对象 (包含token) 需要请求拦截器来判断是否有token令牌
const instanceWidthToken = axios.create({ baseURL });

// 配置请求拦截器     拦截器        请求拦截器               请求配置对象
instanceWidthToken.interceptors.request.use((config) => {
  // 从store中获取token
  const token = store.state.user.profile.token;
  // 判断token是否存在
  if (token) {
    // 如果存在 将token存储在请求头中
    config.headers.Authorization = `Bearer ${token}`;
  }
  // 返回配置 如果不返回 等于修改无效
  return config;
});

// 配置响应拦截器
instanceWidthToken.interceptors.response.use(
  (res) => {
    return res.data;
  },
  (error) => {
    console.log(error);
    // 判断响应码是否为401
    if (error.response.status === 401) {
      // 如果没有token 清空用户信息
      store.commit("user/setProfile", {});
      // 跳转至登录页面
      router.push("/login").then(() => console.log("跳转成功"));
    }
    // 返回错误信息
    return Promise.reject(error);
  }
);

// 不包含token 请求实例对象的请求响应
instanceWithoutToken.interceptors.response.use((res) => {
  return res.data;
});

const requestConfig = (url, methods, data) => ({
  url,
  method: methods,
  //转化为小写
  [methods.toLowerCase() === "get" ? "params" : "data"]: data,
});

// 请求函数 (不携带token)
export function request(url, methods, data) {
  return instanceWithoutToken(requestConfig(url, methods, data));
}
// 请求函数 (携带token)
export function requestWidthToken(url, methods, data) {
  return instanceWidthToken(requestConfig(url, methods, data));
}
